/**
 * 工厂方法模式
 */
public class FactoryMethod {
    public static void main(String[] args) {
        //产品使用
        Application1 concreteProductB = new ConcreteProductB1();
        Product1 object = concreteProductB.getObject();
        object.method();
    }
}
//抽象接口
interface Product1{
    public void method();
}
//产品b
class ProductB implements Product1 {
    @Override
    public void method() {
        System.out.println("ProductB");
    }
}
//产品B1
class ProductB1 implements Product1{
    @Override
    public void method() {
        System.out.println("ProductB1");
    }
}
//抽象方法
abstract class Application1{
    //工厂方法
    abstract Product1 createProduct();
    Product1 getObject(){
        Product1 product1 = createProduct();
        return product1;
    }
}
//把具体的实现交给子类
class ConcreteProductB extends Application1{
    @Override
    Product1 createProduct() {
        return new ProductB();
    }
}
class ConcreteProductB1 extends Application1{
    @Override
    Product1 createProduct() {
        return new ProductB1();
    }
}
